package com.yidu.SystemManagement.controller;

import com.yidu.GlobalManagement.log.OperLog;
import com.yidu.GlobalManagement.log.util.OperationType;
import com.yidu.SystemManagement.entity.Menu;
import com.yidu.SystemManagement.entity.UserRole;
import com.yidu.SystemManagement.service.MenuService;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 用户权限控制层
 * @author 任俊杰
 * @version 1.0
 * @date 2022/12/11
 */

@Controller
public class MenuController {
    @Resource
    private MenuService menuService;

    /**
     * 新增权限功能
     * @param menu 权限功能对象
     * @return  i 受影响的行数
     */
    @ResponseBody
    @RequestMapping("addMenu")
    public int addMenu(Menu menu){
        System.out.println("进来了新增的方法");
        int i =menuService.addMenu(menu);
        if(i>0){
            System.out.println("新增成功");
        }else{
            System.out.println("新增失败");
        }
        return i;
    }

    /**
     * 删除权限功能
     * @param menuId 功能权限id
     * @return int i 受影响的行数
     */
    @ResponseBody
    @RequestMapping("deleteMenu")
    public int deleteMenu(String menuId){
        System.out.println("进来了删除的方法");
        int i = menuService.deleteMenu(menuId);
        if(i>0){
            System.out.println("删除成功");
        }else{
            System.out.println("删除失败");
        }
        return i;
    }

    /**
     * 修改权限功能
     * @param menu 功能权限对象
     * @return int i 受影响的行数
     */
    @ResponseBody
    @RequestMapping("updateMenu")
    public int updateMenu(Menu menu){
        System.out.println("进来了修改的方法");
        int i =menuService.updateMenu(menu);
        if(i>0){
            System.out.println("修改成功");
        }else{
            System.out.println("修改失败");
        }
        return i;
    }

    /**
     * 查询权限功能
     * @param page 当前页
     * @param limit 每页显示数
     * @param menu 用户对象
     * @return
     */
    @ResponseBody
    @RequestMapping("selectMenu")
    public Map selectMenu(int page, int limit, Menu menu){
        System.out.println("进来了查询的方法");
        //调用查询角色的方法
        List<Menu> menus = menuService.selectMenu(page, limit, menu);
        //查行数
        int count = menuService.selectMenuCount(menu);
        Map map=new HashMap();
        map.put("code",0);
        map.put("msg","");
        map.put("count",count);
        map.put("data",menus);
        return map;
    }


    /**
     * 动态实现左边导航栏
     * @param model 视图
     * @param userName 用户名
     * @return
     */
    @RequestMapping("loadMenu")
    @OperLog(message = "主页管理的查询",operation = OperationType.QUERY)
    public String loadMenu(Model model,String userName) {
        System.out.println("进来了动态实现左边导航栏的方法");
        HashMap<String, List<Menu>> menuMap = new HashMap<String, List<Menu>>();
        //调用业务层 查询具体的功能(父功能)
        List<Menu> mainMenuList = menuService.selectMainMenu(userName);
        //循环遍历所有父功能
        for (Menu menu : mainMenuList) {
            //得到父功能id
            String parentMenuId = menu.getMenuId();
            System.out.println("父功能编号" + parentMenuId);
            //根据父功能编号 查出对应的子功能集合
            List<Menu> subMenuList = menuService.selectSubMenu(userName, parentMenuId);
            //把父功能对应的子功能 放入到map集合中
            menuMap.put(menu.getMenuName(), subMenuList);
            //
            for (Menu menu1 : subMenuList) {
                System.out.println("menu1="+menu1.toString());
            }
        }

        //会把数据放到session 当中  默认会放在request 当中
        model.addAttribute("menuMap",menuMap);
        //跳到主界面
        return "index";
    }

}
